perm filename PUB.TES[S,DOC]8 blob
sn#185717 filedate 1975-11-04 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00084 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00012 00002 STANFORD ARTIFICIAL INTELLIGENCE PROJECT MARCH 1973
C00015 00003 SAILON-70 PUB Page i
C00019 00004 Page ii TABLE OF CONTENTS SAILON-70
C00024 00005 SAILON-70 TABLE OF CONTENTS Page iii
C00027 00006 SAILON-70 PUB Page 1
C00030 00007 Page 2 INTRODUCTION SAILON-70
C00034 00008 SAILON-70 INTRODUCTION Page 3
C00038 00009 Page 4 INTRODUCTION SAILON-70
C00042 00010 SAILON-70 INTRODUCTION Page 5
C00046 00011 Page 6 INTRODUCTION SAILON-70
C00051 00012 SAILON-70 INTRODUCTION Page 7
C00055 00013 Page 8 INTRODUCTION SAILON-70
C00060 00014 SAILON-70 INTRODUCTION Page 9
C00061 00015 Page 10 INTRODUCTION SAILON-70
C00064 00016 DAN MATION PARACYBERNETIC PHENOMENA January 15,1972
C00065 00017 DAN MATION PARACYBERNETIC PHENOMENA January 15,1972
C00068 00018 SAILON-70 PUB Page 13
C00071 00019 Page 14 TEXT CONVENTIONS SAILON-70
C00075 00020 SAILON-70 TEXT CONVENTIONS Page 15
C00078 00021 Page 16 TEXT CONVENTIONS SAILON-70
C00081 00022 SAILON-70 TEXT CONVENTIONS Page 17
C00085 00023 Page 18 TEXT CONVENTIONS SAILON-70
C00089 00024 SAILON-70 TEXT CONVENTIONS Page 19
C00094 00025 Page 20 TEXT CONVENTIONS SAILON-70
C00097 00026 (πlus-minus) π-
C00099 00027 SAILON-70 TEXT CONVENTIONS Page 21
C00103 00028 Page 22 TEXT CONVENTIONS SAILON-70
C00107 00029 SAILON-70 TEXT CONVENTIONS Page 23
C00111 00030 Page 24 TEXT CONVENTIONS SAILON-70
C00112 00031 SAILON-70 PUB Page 25
C00115 00032 Page 26 MACROS SAILON-70
C00118 00033 SAILON-70 MACROS Page 27
C00122 00034 Page 28 MACROS SAILON-70
C00125 00035 SAILON-70 MACROS Page 29
C00127 00036 Page 30 PUB SAILON-70
C00131 00037 SAILON-70 EXPRESSIONS Page 31
C00135 00038 Page 32 EXPRESSIONS SAILON-70
C00139 00039 SAILON-70 EXPRESSIONS Page 33
C00142 00040 Page 34 EXPRESSIONS SAILON-70
C00144 00041 SAILON-70 PUB Page 35
C00147 00042 Page 36 STATEMENTS SAILON-70
C00150 00043 SAILON-70 PUB Page 37
C00153 00044 Page 38 DECLARATIONS SAILON-70
C00157 00045 SAILON-70 DECLARATIONS Page 39
C00160 00046 Page 40 DECLARATIONS SAILON-70
C00164 00047 SAILON-70 DECLARATIONS Page 41
C00168 00048 Page 42 DECLARATIONS SAILON-70
C00172 00049 SAILON-70 DECLARATIONS Page 43
C00176 00050 Page 44 DECLARATIONS SAILON-70
C00178 00051 SAILON-70 PUB Page 45
C00180 00052 Page 46 IMPERATIVES SAILON-70
C00185 00053 SAILON-70 IMPERATIVES Page 47
C00189 00054 Page 48 IMPERATIVES SAILON-70
C00193 00055 SAILON-70 IMPERATIVES Page 49
C00197 00056 Page 50 IMPERATIVES SAILON-70
C00201 00057 SAILON-70 IMPERATIVES Page 51
C00204 00058 Page 52 IMPERATIVES SAILON-70
C00208 00059 SAILON-70 IMPERATIVES Page 53
C00211 00060 Page 54 IMPERATIVES SAILON-70
C00215 00061 SAILON-70 IMPERATIVES Page 55
C00218 00062 Page 56 IMPERATIVES SAILON-70
C00222 00063 SAILON-70 IMPERATIVES Page 57
C00223 00064 Page 58 PUB SAILON-70
C00226 00065 SAILON-70 PUB Page 59
C00230 00066 Page 60 LABELS AND CROSS-REFERENCES SAILON-70
C00234 00067 SAILON-70 LABELS AND CROSS-REFERENCES Page 61
C00239 00068 Page 62 LABELS AND CROSS-REFERENCES SAILON-70
C00241 00069 SAILON-70 PUB Page 63
C00244 00070 Page 64 RESPONSES SAILON-70
C00249 00071 SAILON-70 RESPONSES Page 65
C00253 00072 Page 66 PUB SAILON-70
C00256 00073 Page 68 PUB SAILON-70
C00259 00074 SAILON-70 THOROUGHLY EXPLAINED EXAMPLES Page 69
C00261 00075 Page 70 THOROUGHLY EXPLAINED EXAMPLES SAILON-70
C00265 00076 SAILON-70 THOROUGHLY EXPLAINED EXAMPLES Page 71
C00269 00077 Page 72 THOROUGHLY EXPLAINED EXAMPLES SAILON-70
C00272 00078 SAILON-70 THOROUGHLY EXPLAINED EXAMPLES Page 73
C00276 00079 Page 74 THOROUGHLY EXPLAINED EXAMPLES SAILON-70
C00280 00080 SAILON-70 THOROUGHLY EXPLAINED EXAMPLES Page 75
C00282 00081 SAILON-70 PUB Page I
C00286 00082 Page II INDEX SAILON-70
C00290 00083 SAILON-70 INDEX Page III
C00294 00084 Page IV INDEX SAILON-70
C00297 ENDMK
C⊗;
STANFORD ARTIFICIAL INTELLIGENCE PROJECT MARCH 1973
OPERATING NOTE 70
PUB
The Document Compiler
by
Larry Tesler
ABSTRACT:
PUB is an advanced text justifier and page formatter intended
primarily for use by programmers. It can automatically number pages,
sections, figures, footnotes, etc. and can print their numbers in
roman numerals as well as in digit or letter form. It can generate
cross references, tables of contents, and indexes. Page layout is
flexible, and allows multiple column output. Line formatting
includes tabs, underlining, superscripts, subscripts, centering, and
justification. Macros programmed in a SAIL-like string-processing
language can generate text to be printed in the document. The output
of the compiler is a file which can be printed on the terminal, on
the line printer, or on microfilm.
ACKNOWLEDGMENTS:
Les Earnest created the concept of the Document Compiler and
specified most of its capabilities.
Dan Swinehart provided invaluable advice and aid throughout the
development of PUB.
Russ Taylor programmed the FR-80 preprocessor.
This work was supported in part by the Advanced Research Projects
Agency of the Department of Defense under Contract SD 183.
SAILON-70 PUB Page i
TABLE OF CONTENTS
SECTION PAGE
1 INTRODUCTION
1.1 PURPOSE . . . . . . . . . . . 1
1.2 CAPABILITIES . . . . . . . . . . 1
1.3 OPERATION . . . . . . . . . . . 2
1.4 COMPILER OUTPUT . . . . . . . . . 4
1.5 READING THIS MANUAL . . . . . . . . 5
1.6 TUTORIAL FOR BEGINNERS . . . . . . . 5
1.7 SAMPLE COMPILATION . . . . . . . . 9
2 TEXT CONVENTIONS
2.1 ILLEGAL CHARACTERS . . . . . . . 13
2.2 COMMAND AND TEXT LINES . . . . . . 13
2.3 PARAGRAPHING . . . . . . . . . 14
2.4 FILL MODE . . . . . . . . . . 14
2.5 JUSTIFICATION . . . . . . . . . 14
2.6 BREAKING AT BLANK LINES . . . . . . 15
2.7 BREAKING AT TABS . . . . . . . . 15
2.8 BREAKING AT CARRIAGE-RETURNS . . . . 15
2.9 NOFILL MODE . . . . . . . . . . 15
2.10 HORIZONTAL SPACE COMPACTION . . . . 16
2.11 VERTICAL GROUPING . . . . . . . . 17
2.12 MODE AND SWITCH SETTING COMMANDS . . . 17
2.13 WORD BREAKS . . . . . . . . . . 18
2.14 CONTROL FUNCTIONS . . . . . . . . 18
2.15 CONTROL CHARACTER ACTIVATION . . . . 21
2.16 COMPUTED TEXT . . . . . . . . . 23
3 MACROS
3.1 CALLING A MACRO FROM A COMMAND LINE . . 25
3.2 CALLING A MACRO FROM A TEXT LINE . . . 25
3.3 TEMPLATES . . . . . . . . . . 26
3.4 MACRO DECLARATION . . . . . . . . 27
3.5 MACRO CALLS . . . . . . . . . . 27
3.6 OMISSIONS . . . . . . . . . . 28
3.7 RECURSIVE MACROS . . . . . . . . 29
Page ii TABLE OF CONTENTS SAILON-70
4 EXPRESSIONS
4.1 DATA TYPE . . . . . . . . . . 30
4.2 VARIABLES . . . . . . . . . . 30
4.3 AUTOMATICALLY DECLARED VARIABLES . . . 31
4.4 SIMPLE EXPRESSIONS . . . . . . . 32
4.5 GENERAL EXPRESSIONS . . . . . . . 33
4.6 CONSTANTS . . . . . . . . . . 34
5 STATEMENTS
5.1 STATEMENT TYPES . . . . . . . . 35
5.2 BLOCK . . . . . . . . . . 35
5.3 COMPOUND STATEMENT or CLUMP . . . . 35
5.4 ONE PARAGRAPH SCOPE . . . . . . . 36
6 DECLARATIONS
6.1 SCOPE . . . . . . . . . . 37
6.2 MODE DECLARATIONS . . . . . . . . 37
6.3 TABS DECLARATION . . . . . . . . 37
6.4 INDENT DECLARATION . . . . . . . 38
6.5 PREFACE DECLARATION . . . . . . . 39
6.6 DOUBLE SPACING . . . . . . . . . 39
6.7 AREA DECLARATION . . . . . . . . 39
6.8 MARGIN CONTROL . . . . . . . . . 40
6.9 PLACE DECLARATION . . . . . . . . 42
6.10 TEMPORARY AREAS . . . . . . . . 42
6.11 COUNTER DECLARATION . . . . . . . 43
7 IMPERATIVES
7.1 ASSIGNMENT STATEMENT . . . . . . . 45
7.2 CONDITIONAL STATEMENT . . . . . . 45
7.3 NEXT COUNTER VALUE STATEMENT . . . . 45
7.4 NEXT PAGE STATEMENT . . . . . . . 47
7.5 HEADINGS AND FOOTINGS . . . . . . 48
7.6 SECTIONING . . . . . . . . . . 48
7.7 COMMAND CHARACTER STATEMENT . . . . 49
7.8 PORTION DEMARCATION . . . . . . . 49
7.9 SEND STATEMENT . . . . . . . . . 50
7.10 RECEIVE STATEMENT . . . . . . . . 52
7.11 REQUIRE STATEMENT . . . . . . . . 53
7.12 SKIP STATEMENTS . . . . . . . . 53
7.13 PAGE FRAME STATEMENT . . . . . . . 55
SAILON-70 TABLE OF CONTENTS Page iii
7.14 BREAK STATEMENT . . . . . . . . 55
7.15 CONTINUE STATEMENT . . . . . . . 55
7.16 DEVICE STATEMENT . . . . . . . . 55
7.17 UNIMPLEMENTED STATEMENTS . . . . . 56
8 COMMENTS
9 LABELS AND CROSS-REFERENCES
9.1 CROSS-REFERENCES . . . . . . . . 59
9.2 LABELS . . . . . . . . . . 60
10 RESPONSES
10.1 TEXT RESPONSES . . . . . . . . . 63
10.2 TRANSITION RESPONSES . . . . . . . 64
11 FOOTNOTES
APPENDICES
----------
A THOROUGHLY EXPLAINED EXAMPLES
A.1 SECTIONING MACROS . . . . . . . . 68
A.2 SAMPLE TABLE OF CONTENTS . . . . . 69
A.3 ONE-LEVEL INDEXES . . . . . . . . 70
A.4 TWO-LEVEL INDEXES . . . . . . . . 72
A.5 KWIC INDEXES . . . . . . . . . 74
SUBJECT AND COMMAND INDEX . . . . . . . . . . I
SAILON-70 PUB Page 1
SECTION 1
INTRODUCTION
1.1 PURPOSE
PUB is a compiler which translates a manuscript into a
document.
A "manuscript" is an SOS file containing the text of a
publication interspersed with control characters and
commands. The function of the compiler is to arrange
this text on formatted pages under the direction of
the control characters and commands.
Output is written on a ".DOC" file known as the
"document". TYPE, SPOOL or PRINT it. Under certain
conditions, the document can be edited with TECO (see
Section 7.16), but it is wiser to make corrections in
the manuscript and then rerun the compiler.
MANUSCRIPT →→→→→→→→ DOCUMENT
COMPILER
1.2 CAPABILITIES
PUB provides the usual capabilities of a simple text-
justifier, including:
>Page numbering
>Optional justification to the right margin
>Centering of titles
>Headings and footings
>Control of Spacing and Indentation
>Underlining
In addition, it features advanced documentation
capabilities, such as:
1.1 - 1.2
Page 2 INTRODUCTION SAILON-70
>Columnar output
>Footnote placement
>Macros
>Index Generation
>Table of contents generation
>Cross-reference to a variable target
>Automatic numbering of equations, tables, notes, etc
>Superscripts and Subscripts
>Microfilm Output
The command language is a dialect of SAIL Algol,
providing the user with:
>Block structure
>Conditional command execution
>Conditional text inclusion
>Arithmetic a in SOS format, then the <line no.> is
always five digits, including leading zeroes if
necessary. If it is from a TECO or TVEDIT file, then
PUB generates line numbers 1, 2, 3, etc. without
leading zeroes. If it is from a ".PUG" file, then the
<line no.> is the line number/ page number of a
relevant line in your manuscript or in some other
source file.
If a macro was being expanded, the line number and
1.4
SAILON-70 INTRODUCTION Page 5
page number of its definition are noted within square
brackets. The file that contained the definition is
not noted, so if can't find it in your manuscript, it
probably came from PUBSTD.DFS, the PUB standard macro
file, or from one of your REQUIRE files (see Section
7.11).
Examples:
02300/10 Manuscript file, page 10, line 2300 (SOS)
IND02300/10/1 INDEX.PUG file, page 1, comes from Manuscript 2300/10
PUB25/1 PUB Standard Macro File, Page 1, Line 25 (TVEDIT)
1.5 READING THIS MANUAL
This manual is ordered such that as soon as you have
learned enough of the system to solve your particular
problem, you can skip the rest of the manual. Read at
least through Section 2.3 before making any such
assumption.
In describing the syntax of PUB commands, the
following meta-linguistic symbolism is employed:
<...> These brackets delimit the name of a syntactic
entity
[...] These delimit optional components of the command
...|... This character separates alternatives for the same
command component
Cross-references in this document are always to
subsections. Subsection numbers are printed at the
bottom of each page.
1.6 TUTORIAL FOR BEGINNERS
PUB is a string processing language. Characters can
be formed into words, words into lines, lines into
paragraphs, paragraphs into columns, columns into
"areas" (such as the title areas at the top and bottom
of the page), areas into pages, pages into sections,
1.5 - 1.6
Page 6 INTRODUCTION SAILON-70
sections into "portions" (such as the Table of
Contents or the Appendices), and portions into a
document. The methods of bulding larger units from
smaller ones are flexible and under control of the
programmer.
The most trivial use of PUB is to create a document
that is exactly identical to the manuscript, adding
only headings and footings. PUB assumes that the
format of each output page is as follows. The first
three lines are a Heading area of which only the first
is usually used. The next 48 lines (lines 4 to 51)
are the Text area. Line 52 is blank and line 53 is a
Footing area. The Footing area is for page numbers
and other reference information, not for footnotes.
(Footnotes are placed inside the Text area, towards
its bottom).
The width of each page is assumed to be 69 characters.
It is assumed that there is only one column of text
output. Therefore, the longest an output line can be
is 69 characters.
The number of lines in each area, the number of
columns of text, and the number of characters in each
column may be changed by declaration. See Section
6.7 and Section 7.13 for details. If all you want
to do is widen the page, e.g., to 75 characters, then
make the following line the first of the manuscript:
.PAGE FRAME 53 HIGH 75 WIDE
The "Dot" in column one indicates that this line is a
Command Line for PUB to obey and should not be printed
in the document. If you would rather a different
character in column one served for this purpose, see
Section 2.2.
PUB assumes that you want no headings and footings.
It will leave the heading and footing areas blank
unless you specify otherwise. The simplest way to
specify headings and footings is with the standard
macros "EVERY HEADING" and "EVERY FOOTING". These
macros can specify a title for the left edge, center,
and right edge of the heading area and the footing
area. For example, the macro call:
.EVERY HEADING(PRELIMINARY REPORT,PARACYBERNETIC PHENOMENA,1972)
1.6
SAILON-70 INTRODUCTION Page 7
will print on the top line of every page the three
titles shown.
To make the top line of every page display the title
"PRELIMINARY REPORT" on the left and the current date
on the right, use:
.EVERY HEADING(PRELIMINARY REPORT, ,{DATE})
The consecutive commas indicate that the center is
empty. The curly brackets around the word DATE
specify that DATE is not a title to be printed but
rather a variable to be evaluated.
To make the number of each page appear bottom center,
use:
.EVERY FOOTING(,{PAGE},)
To learn about fancier headings and footings, you will
have to read most of this document, especially Section
7.5 and Section 10.2.
PUB will number your pages 1, 2, 3, etc. unless you
declare otherwise. To learn how, see Section 6.11.
A new page of output will be started for one of two
reasons: the previous page is full, or a page-changing
command is executed. The most common page-changing
command is:
.NEXT PAGE
This always starts a new page, even if one was just
started and nothing is on it yet. To start a new page
only if there is something on the current page, use:
.SKIP TO COLUMN 1
To leave a few blank lines in the document, use:
.GROUP SKIP 10
The SKIP command is described in Section 7.12.
PUB processes text a paragraph at a time. The usual
way to indicate the end of a paragraph in your
manuscript is by a blank line (that is, just a CR and
LF). Oher ways are discussed elsewhere in this
manual, beginning at Section 2.3.
Usually, PUB packs a paragraph as tightly as possible
by filling up each output line with words before
1.6
Page 8 INTRODUCTION SAILON-70
beginning a new line. This is called "filling". Then
PUB inserts extra spaces between words to eliminate a
ragged right edge from the paragraph. This is called
"justifying".
PUB will not indent the first line of paragraphs
unless an indent command appears in the manuscript,
e.g.:
.INDENT 6
To learn more about indentation and related matters,
see Section 6.4 through Section 6.7.
PUB assumes you would like your text lines filled out
and justified. You can selectively exempt blocks of
your manuscript from this fate. Each such block must
be delimited by ".BEGIN" and ".END". After "BEGIN",
specify a formatting mode to persist for the duration
of the block. Examples:
Fill, but don't Justify Don't even fill Copy verbatim
.BEGIN NOJUST .BEGIN NOFILL .BEGIN VERBATIM
... ... ...
.END .END .END
In "NOJUST" mode, lines will be filled but not
justified. In "NOFILL" and "VERBATIM" modes, they
will not even be filled. The difference between
NOFILL and VERBATIM is that VERBATIM is both faster
and dumber. It is faster because it copies the lines
of the manuscript to the document without looking at
them, except to see if there is a dot in column one.
It is dumber because it does not recognize text
control characters that PUB normally recognizes, and
it does not reformat in any way. Thus, VERBATIM is
used to copy blocks of manuscript that are arlready
formatted perfectly.
Filling allows the manuscript to be quite ragged, a
great convenience in editing. Short lines are
lengthened and long lines are shortened. Be careful
in NOFILL or VERBATIM mode that no manuscript line is
longer than 69 characters (or whatever limit you have
declared), or some of it will be lost and an error
message given.
1.6
SAILON-70 INTRODUCTION Page 9
1.7 SAMPLE COMPILATION
You now know enough to use PUB for simple purposes.
The next three pages show a sample manuscript and the
document that PUB produced from it.
1.7
Page 10 INTRODUCTION SAILON-70
.EVERY HEADING(DAN MATION,PARACYBERNETIC PHENOMENA,{DATE})
.EVERY FOOTING(,{PAGE},)
.INDENT 6
.BEGIN VERBATIM
.GROUP SKIP 20
PARACYBERNETIC PHENOMENA
BY DAN MATION
.END
.NEXT PAGE
It has been observed that the Sigma 3 in Horsetown, Mass. and the
CDC 6600 in Liverless, Cal. tend to have parity errors at the same
time. When records were compared by
Miss Minnie Messer, Director of the Horsetown Chamber of Commerce
Computation Facility,
and Mr. Solomon Crunch of Liverless Hospital's Organ-Transplant
Inventory Project, it was shown that
the correlation of parity error occurrences was 0.8, with a
probability of random coincidence of <.00000001.
Miss Messer and Mr. Crunch revealed these discoveries at the
Universal Users Union meeting in Cranchville, Tenn. after they
arrived two hours late for Mr. Crunch's scheduled talk there.
They said that in the excitement of discovery
the meeting slipped their minds.
This report has motivated this author to undertake
a wider survey to determine if similar
phenomena have occurred elsewhere. The author has
solicited Miss Messer's assistance in this survey,
but without the cooperation of the entire computing community,
it is unlikely that sufficient
data
can be collected. Therefore, we request that interested
parties tabulate the exact times of occurrence of parity
errors on their computer during the 7 day period
1200 April 18 to 1200 April 25 and send it to:
.BEGIN NOFILL
Paracybernetic Society
c/o Dan Mation
Boise Institute of Technology
Boise, Idaho
.END
Results of the study will be presented at the next UUU meeting
in December.
DAN MATION PARACYBERNETIC PHENOMENA January 15,1972
PARACYBERNETIC PHENOMENA
BY DAN MATION
1
DAN MATION PARACYBERNETIC PHENOMENA January 15,1972
It has been observed that the Sigma 3 in Horsetown, Mass. and
the CDC 6600 in Liverless, Cal. tend to have parity errors at the
same time. When records were compared by Miss Minnie Messer,
Director of the Horsetown Chamber of Commerce Computation Facility,
and Mr. Solomon Crunch of Liverless Hospital's Organ-Transplant
Inventory Project, it was shown that the correlation of parity error
occurrences was 0.8, with a probability of random coincidence of
<.00000001.
Miss Messer and Mr. Crunch revealed these discoveries at the
Universal Users Union meeting in Cranchville, Tenn. after they
arrived two hours late for Mr. Crunch's scheduled talk there. They
said that in the excitement of discovery the meeting slipped their
minds.
This report has motivated this author to undertake a wider
survey to determine if similar phenomena have occurred elsewhere.
The author has solicited Miss Messer's assistance in this survey, but
without the cooperation of the entire computing community, it is
unlikely that sufficient data can be collected. Therefore, we
request that interested parties tabulate the exact times of
occurrence of parity errors on their computer during the 7 day period
1200 April 18 to 1200 April 25 and send it to:
Paracybernetic Society
c/o Dan Mation
Boise Institute of Technology
Boise, Idaho
Results of the study will be presented at the next UUU meeting
in December.
2
SAILON-70 PUB Page 13
SECTION 2
TEXT CONVENTIONS
2.1 ILLEGAL CHARACTERS
If the following characters occur in the manuscript,
they may cause problems:
'177 Rubout
'175 Altmode
'13 Vertical Tab
These characters are ignored in the manuscript:
'0 Null
'14 Form Feed (except after LF, where it is a page
mark)
A manuscript prepared using SOS or TVEDIT is
legitimate if it has no vertical tabs. If it is
prepared using TECO, be sure as well that every line
ends with CR LF.
Tabs are expanded to the appropriate number of spaces,
as in the line editor.
2.2 COMMAND AND TEXT LINES
Every line with a dot (".") in column 1 is processed
as a command line. Every other line is processed as a
text line.
If you would prefer a different character to introduce
command lines, e.g., $, use the command:
COMMAND CHARACTER "$" ;
2.1 - 2.2
Page 14 TEXT CONVENTIONS SAILON-70
2.3 PARAGRAPHING
The text is processed in logical units called
"paragraphs". A paragraph is the accumulation of
words from one or more text lines, terminated by the
occurrence of a paragraph break.
A paragraph break can be caused by the command BREAK
as well as by several other commands. In addition, a
paragraph break can be caused by signals in the text.
Paragraphing conventions can be varied by the use of
various mode and switch settings.
2.4 FILL MODE
In FILL mode, the compiler puts as many words as can
fit on each output line before beginning a new line --
each line is "filled" with words.
For convenience of exposition, names have been given
to the parts of the output paragraph in FILL mode.
The first line is called the crown, and the rest of
the lines are called the vest. It is common to indent
the crown and not the vest, or vice versa, or to
indent them different amounts. The last line of the
vest is called the hem. While the other lines of the
paragraph can be subject to justification, the hem
line is never justified.
2.5 JUSTIFICATION
In FILL mode, whether or not output lines are
justified to the right margin is determined by the
setting of the "ADJUST-NOJUST" switch; but the hem
line is never justified in any case.
2.3 - 2.5
SAILON-70 TEXT CONVENTIONS Page 15
2.6 BREAKING AT BLANK LINES
In FILL mode, a BREAK is caused by every blank line
(just CR-LF). Redundant blank lines have no effect.
To disable this response, see Section 10.1.
2.7 BREAKING AT TABS
Tabs are converted to an appropriate number of spaces
by PUB. If you would like a single tab at the
beginning of a text line to cause a paragraph break,
put this command at the beginning of your manuscript:
.TABBREAK
This makes text lines that are indented exactly 8
spaces cause a break. Since an initial TAB is
converted to 8 spaces, it will also break. The
inverse of TABBREAK is TABSPACE.
2.8 BREAKING AT CARRIAGE-RETURNS
In FILL mode, PUB usually converts every carriage-
return at the end of a text line to a space. If it is
at the end of a sentence, it converts the carriage-
return to two spaces. If you would rather that every
carriage-return ending a text line caused a paragraph
break, use this command:
.CRBREAK
The inverse of CRBREAK is CRSPACE.
2.9 NOFILL MODE
In NOFILL mode, one input line produces one output
line, even if it falls far short of the right margin;
if the line is too long, characters will be lost.
Every carriage-return ending a text line in NOFILL
2.6 - 2.9
Page 16 TEXT CONVENTIONS SAILON-70
mode causes a paragraph break. The commands ADJUST,
CRSPACE, and TABBREAK do not affect this mode.
NOFILL mode has several variations, which differ
mainly in the final treatment of the output line:
NOFILL: (Standard variation) No special treatment.
CENTER: Center the output line between the margins.
FLUSH RIGHT: Shove it against the right margin.
FLUSH LEFT: Shove it against the left margin.
JUSTJUST: Justify it by the insertion of spaces.
VERBATIM: Copy text lines to output exactly as written,
without changing
indentations. Ignore all control characters {α↑[#]&↓β\∂-∞←→.
Dot in column 1 still signals a command line.
This mode speeds text processing
when no formatting is needed.
SUPERIMPOSE [n]: Suppress the LF after each line,
except every n'th line.
< ↑ < ! ≡ ∩ ⊂ ~ % 7 Z
| ↓ > ? / ∪ ⊃ . \ - -
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
2.10 HORIZONTAL SPACE COMPACTION
In COMPACT mode, redundant spaces in the input line
are discarded. In RETAIN mode, they
are retained.
More precisely, in COMPACT mode, a sequence of two or
more spaces is reduced to one space, except at the end
of a sentence, where it is only reduced to two spaces,
and at the beginning of a text line, where all spaces
are discarded. Of course, spaces may be re-inserted
during justification.
2.10
SAILON-70 TEXT CONVENTIONS Page 17
2.11 VERTICAL GROUPING
In GROUP mode, all output lines are forced to appear
in an unbroken column. Its inverse is APART mode. If
the bottom of the output page is encountered while in
GROUP mode, the whole group is moved to the top of the
next column or page.
It is unwise to use GROUP mode for more than a few
lines that must appear undivided in the output.
Example:
.GROUP
EQUATION 6
m = vt
.APART
This would prevent "Equation 6" from appearing at the
bottom of one page and "m = vt" at the top of the
next.
2.12 MODE AND SWITCH SETTING COMMANDS
The commands that select the paragraphing mode are
FILL, NOFILL, CENTER, FLUSH RIGHT, FLUSH LEFT,
JUSTJUST, VERBATIM, and SUPERIMPOSE [n], where n
[optional] is any "SAIL" expression.
The commands ADJUST and NOJUST set the FILL-mode
justification switch. TABBREAK, TABSPACE, CRBREAK,
and CRSPACE control the reaction to initial tabs and
to carriage-returns in FILL mode.
The commands RETAIN and COMPACT, GROUP and APART
select the space compaction and column grouping modes.
At the outset of compilation, the settings in force
are:
.FILL ADJUST TABSPACE CRSPACE RETAIN APART
WARNING: Switching to NOFILL or to any of its
variations automatically switches to RETAIN mode.
This can be overridden by following the command by
COMPACT.
2.11 - 2.12
Page 18 TEXT CONVENTIONS SAILON-70
2.13 WORD BREAKS
The compiler processes the input paragraph in units
called words. A "word" is roughly defined as a
sequence of consecutive visible characters. More
precisely, the compiler concatenates characters into a
word until the occurrence of a word break.
A word break is normally signalled by any of the
following in a text line:
>A space (or a sequence of spaces)
>A carriage-return (the end of an input line)
>The control character β, if activated (as well as some others)
Word breaks serve two functions.
(1) FILLING: In generating an output paragraph, the
compiler puts as many words as can fit on each line
before beginning a new line. The paragraph will only
be divided for this purpose at word breaks.
(2) JUSTIFYING: During justification, extra spaces
will only be inserted at word breaks.
2.14 CONTROL FUNCTIONS
Several control functions can be invoked by control
characters in the text line. The user can choose the
characters he wishes to serve these functions. For
simplicity of exposition, a suggested character has
been designated for each function.
The following control functions are available. If the
description states: "BLA mode only", then in other
modes, the character is treated no differently than an
alphanumeric.
β Cause a word βreak.
α Pretend the next character is αlphanumeric (this
lets you slip in control characters);
# Same as α<space>; sneaks spaces into words.
2.13 - 2.14
SAILON-70 TEXT CONVENTIONS Page 19
. ! ? FILL mode only, and only at the end of a word:
marks the end of a sentence. This means:
(1) If followed by two or more spaces, COMPACTion
only reduces the spaces to two instead of one.
(2) If followed by a carriage-return, replaces the
CR by two spaces instead of one.
- FILL mode only, and not the first character of a
word: a hyphen. This means:
(1) If at the end of a line, prevents the word
break that usually occurs there.
(2) Otherwise, permits the word to be broken after
the hyphen in case it overfills the output line.
\ TAB. Insert spaces up to the next tab stop set by
the TABS command (see Section 6.3).
∂+n MOVE RIGHT. Leave n spaces in the output line.
∂-n MOVE LEFT n characters. Create new characters
(these due to Jerry Agin): ~ ~ O O ~
> ( - | V.
∂n TAB. Insert spaces up to but not including the
n'th character position from the left margin (flush
left is n=1). Both kinds of TAB (\ and ∂n) inhibit
insertion of all justification spaces to their left.
For ∂n and ∂+n, n may be any "SAIL" expression
enclosed in parentheses. In the case of a single
letter variable or a one-digit number, the parentheses
may be omitted. RESTRICTION... ∂(<expression>) may
not appear as the last thing on a text line.
→ Right Flush. If a \ or ∂n occurs later in the
line, slide the text that is between here and there
flush against the column designated by the tab.
Otherwise, slide the rest of this paragraph against
the right margin, inhibiting justification.
← Center. If a \ or ∂n occurs later in the line,
center the text that is between here and there halfway
between the current column and the column designated
by the tab. Otherwise, center the following text
between the margins, inhibiting justification.
2.14
Page 20 TEXT CONVENTIONS SAILON-70
∞x Repeat. `x' is any character. If ∞x precedes \,
∂+, ∂n, →, or ←, then use the character x instead of
spaces as filler to the left of the affected text
(i.e., ∞.\ puts ..... up to the tab column).
∞x∞y∞z...Use the repeating string xyzxyz... as filler.
↓_..._↓ Underline. In the text between brackets, every
visible character is underlined. " " is only a control
character when paired with "↓". If you want spaces
underlined as well in a title, simply
replace each space by an underbar.
∪ ∪nderline one word. The following word
(consisting of letters and digits only) is underlined.
π πrint a wierd character. The line printer and FR-
80 have these but your terminal doesn't.
To get.............Write
(center dot) π.
(gamma) πG or πg
(apple delta) π∂
(integral) π~ (tilde)
(πlus-minus) π-
(circle plus) π+
{ Switch to Command Processing. To return to text
processing, use }. See Section 2.16.
↓x Subscript. The text x is (an extra
lowered a line
line is reserved for it). x may be any single
character except "[" or " ", or may be a sequence of
characters bracketed between [...] . A subscript must
appear all on one line.
↑x Superscript. Analogous to Subscript, except x may
also be the single character " ". Collectively,
superscripts
and are called somescripts.
subscripts
These may combine and nest in interesting ways.
Super/subscripts may not nest more deeply than 4.
x&y Align. "&" is only considered a control character
if it is the first character following a somescript x.
2.14
SAILON-70 TEXT CONVENTIONS Page 21
Its effect is to align the leftmost characters of x
and y by backspacing after printing x and before
printing y, and to align the rightmost characters by
forward spacing to the end of the longer of x and y
when done. x must be a somescript. y may be any
single character except "[", "↑", or "↓", or may be
another somescript, or may be any sequence of
characters enclosed between [...] . Examples:
To get...Write To get....Write
j _ 2
x x↑j&↓i y ↑ &y↓[i+j]&↑[ 2]
i i+j
2
x x↓i↑2 SUM ↓[ t]&[SUM]
i t
i2
∃ ↓x&∃ x x↑i↑2
x
2
. i
t ↑.&t x x↑[i↑2]
2.15 CONTROL CHARACTER ACTIVATION
At the outset of compilation, the only control
characters recognized are the punctuators ".", "!",
and "?" when they appear at the end of a word, and
hyphen ("-") when it appears in the middle of a word.
NOTE: Not even "{" is recognized unless you activate
it. However, "}" is permanently active, because it is
not a text control character but really a command
langauge delimiter.
To turn on any control function using its suggested
character ("α" for example), use the command:
.TURN ON "α"
To activate the control function using a different
character, such as "%" or "β", write:
2.15
Page 22 TEXT CONVENTIONS SAILON-70
.TURN ON "%" FOR "α"
.TURN ON "β" FOR "α"
To de-activate a control character, such as "?" or
"%", use:
.TURN OFF "?"
.TURN OFF "%"
One TURN command may have several operands separated
by commas:
.TURN ON "%" FOR "α", "@" FOR "←", "→", "\"
.TURN ON "↑", "↓", "[", "]", "_", "&"
The latter may be abbreviated:
.TURN ON "↑↓[]_&"
There is a subtle problem that arises when control
characters have been turned on inside a macro and the
macro wants to turn off only the ones that weren't on
previously. If it has done a TURN ON "↑", for
example, it can not undo it with TURN OFF "↑", for
that would always TURN it OFF whether or not it was
originally on. There are two ways to do it right.
One is to use block structure (see Section 5.2), but
sometimes this is impossible, because blocks cause
paragraph breaks. The other way is to use the command
TURN ON|OFF without arguments. Its effect is to
cancel the previous TURN ON|OFF that had arguments,
was in the current block, and has not yet been
cancelled.
For purposes of smooth exposition, in the rest of this
manual it is assumed that you have turned on all the
control functions and used all the suggested
characters for them. Remember, though, that only the
punctuators are turned on unless you command
otherwise!
It is recommended that you don't turn on any
characters except in short blocks where you know
you'll remember they're on. Ideal places are inside
macro bodies (See Section 3.1).
2.15
SAILON-70 TEXT CONVENTIONS Page 23
2.16 COMPUTED TEXT
The control character "{" will switch to command
processing right in the middle of a text line. This
allows the execution of any PUB commands without first
causing either a paragraph break or a word break. If
you want a word break before the {, force it by means
of a β or a space.
The command most commonly executed after "{" is the
Computed Text Command. A variable, a constant, or a
parenthesized expression occurring in isolation is
evaluated and its string value is then scanned by the
text scanner as text. Example:
A = {A}, and B = ↓ {(2+2)} ↓.
If the value of A was the string "∪3", this would
output:
A = 3, and B = 4.
Caution: If a {...} construct extends onto a second
input line, be sure to begin the continuation line
with a "." -- or you won't be in the command scanner!
Caution: A string constant following the word BEGIN is
considered a block name, as in SAIL, and not computed
text. If you put computed text after BEGIN, precede
it by a semicolon.
Note that a "}" (which can not be TURNed ON and OFF)
switches to text processing from command processing at
any time. This allows a Short Text Line to be put
right into a command line:
.NOFILL }I am a short text line.{BREAK FILL
which is the compact equivalent of:
.NOFILL
I am a short text line.
.FILL
To summarize, there are two ways to switch from
command to text processing:
2.16
Page 24 TEXT CONVENTIONS SAILON-70
>New line without "." in column 1
>}
and two ways to switch from text processing to command
processing:
>New line with "." in column 1
>{
2.16
SAILON-70 PUB Page 25
SECTION 3
MACROS
3.1 CALLING A MACRO FROM A COMMAND LINE
It is common to repeat an identical sequence of
commands many times in a manuscript, e.g.,
.FILL ADJUST COMPACT TURN ON "∂{αβ"
You could define the following macro:
.MACRO FAC ⊂ FILL ADJUST COMPACT TURN ON "∂{αβ" ⊃
and then whenever you want the whole sequence
executed, write simply:
.FAC
The body of the macro enclosed between ⊂ and ⊃ is
substituted for its name and then scanned by the
command scanner.
A macro may also have arguments:
.MACRO T(CHR) ⊂ NOFILL TURN ON "CHR" ⊃
which when called by:
.T(α)
expands to:
. NOFILL TURN ON "α"
3.2 CALLING A MACRO FROM A TEXT LINE
It is also common to repeat an awkward sequence of
control characters many times in the manuscript, e.g.,
X↑i&↓[j,k]
You could define the following macro:
.MACRO XIJK ⊂"X↑i&↓[j,k]"⊃
but to call it you must get to the command scanner:
{XIJK}
3.1 - 3.2
Page 26 MACROS SAILON-70
When the body is substituted for the name, this
becomes a string constant inside curly brackets:
{"X↑i&↓[j,k]"}
so it is considered computed text and is scanned by
the text scanner, producing the output:
i
X
j,k
Again, parameters can be used:
.MACRO S(X,I,J,K) ⊂"X↑i&↓[j,k]"⊃
If called by {X(i,j,k)} this would expand to the same
as above, but called by
{S(Y,t,t1,URG)}
it would expand to "Y↑t&↓[t1,URG]" which would output:
t
Y
t1,URG
Some macros are declared for you in an automatically
loaded file PUBSTD.DFS (see Section 7.5). Other
useful macros are declared in a file PUBMAC.DFS that
you can REQUIRE (see Section 7.11) to be loaded; they
are described in PUBMAC.TES[UP,DOC].
3.3 TEMPLATES
A "template" occurs as a part of several commands,
including the macro declaration, and requires some
explanation. Its purpose is to store away a piece of
program for later, instead of immediate, execution.
Syntax:
⊂ <piece of program> ⊃
The <piece of program> may include other templates,
and may span sever